__all__ = ['add']


"""
作用域

    有的函数和变量我们希望给别人使用，有的函数和变量我们希望仅仅在模块内部使用。在Python中，是通过_前缀来实现的
    正常的函数和变量名是公开的（public），可以被直接引用
    __xxx__这样的变量是特殊变量，可以被直接引用，但是有特殊用途
    _xxx和__xxx这样的函数或变量就是非公开的（private），不应该被直接引用
"""


def add(x, y):
    print(x + y)
    return x + y


def plus(x, y):
    return x + y

# 我们在模块里公开greeting()函数，而把内部逻辑用private函数隐藏起来了，这样，调用greeting()函数不用关心内部的private函数细节，这也是一种非常有用的代码封装和抽象的方法
# 
# 外部不需要引用的函数全部定义成private，只有外部需要引用的函数才定义为public
def _private_1(name):
    return 'Hello, %s' % name

def _private_2(name):
    return 'Hi, %s' % name

def greeting(name):
    if len(name) > 3:
        return _private_1(name)
    else:
        return _private_2(name)

# 当我们在命令行运行MyMoudel模块文件时，Python解释器把一个特殊变量__name__置为__main__，而如果在其他地方导入该hello模块时，if判断将失败，因此，这种if测试可以让一个模块通过命令行运行时执行一些额外的代码
# 只在当前文件中调用该函数，其他导入的文件内不符合该条件，则不执行test函数调用
if __name__ == '__main__':
    add(1, 1)
